home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / utils / desktop / mclock.zoo / hurclock.lst < prev    next >
Encoding:
File List  |  1990-12-28  |  3.5 KB  |  112 lines

  1. 0 ' Analog metric clock, measures 100 hurs per day
  2. 1 ' by Robert Fischer, 1990
  3. 2 ' This program is in the public domain.
  4. 3 ' The smaller two hands combined give the number of hurs, and the last
  5. 4 ' hand rotates once per hur.  You _could_ design the hands to represent
  6. 5 ' different digits of the time.
  7. 6 ' ============ paramaters
  8. 7 Centerx=320:Centery=200
  9. 8 Xrad=200:Yrad=200
  10. 9 Charx=8:Chary=16
  11. 10 ' ===================
  12. 11 X$= TIME$
  13. 12 Hour= VAL( MID$(X$,1,2))
  14. 13 Minute= VAL( MID$(X$,4,2))
  15. 14 Second= VAL( MID$(X$,7,2))
  16. 15 ' ===================
  17. 16 MODE =3: LINE WIDTH = 1
  18. 17 Disp_Face
  19. 18 Compute_Newhands(Time):Compute_Newhands(Time):Disp_Hands
  20. 19 Start_Sec= TIMER -Hour*720000-Minute*12000-Second*200
  21. 20 WHILE 1
  22. 21     Time=( TIMER -Start_Sec)/172.8
  23. 22     Redisp_Clock(Time)
  24. 23 WEND
  25. 24 END
  26. 25 ' =====================
  27. 26 DEF PROC Redisp_Clock(Time)
  28. 27     PROC Compute_Newhands(Time)
  29. 28     PROC Change_Hands
  30. 29 RETURN
  31. 30 '
  32. 31 DEF PROC Compute_Newhands(Time)
  33. 32     Compute_Hand(0,Time/10000,.5)
  34. 33     Compute_Hand(1,Time/1000,.64)
  35. 34     Compute_Hand(2,Time/100,.9)
  36. 35 RETURN
  37. 36 '
  38. 37 DEF PROC Change_Hands
  39. 38    FOR I=0 TO 2
  40. 39        IF Oldhandx(I)<>Handx(I) OR Oldhandy(I)<>Handy(I) THEN
  41. 40            Draw_Line(Centerx,Centery,Oldhandx(I),Oldhandy(I),3-I)
  42. 41            Draw_Line(Centerx,Centery,Handx(I),Handy(I),3-I)
  43. 42        ENDIF
  44. 43    NEXT I
  45. 44 RETURN
  46. 45 '
  47. 46 DEF PROC Disp_Hands
  48. 47     FOR I=0 TO 2
  49. 48         Draw_Line(Centerx,Centery,Handx(I),Handy(I),3-I)
  50. 49     NEXT I
  51. 50 RETURN
  52. 51 '
  53. 52 DEF PROC Disp_Clock(Time)
  54. 53     PROC Disp_Face
  55. 54     PROC Disp_Hand(Time/10000,.6)
  56. 55     PROC Disp_Hand(Time/1000,.7)
  57. 56     PROC Disp_Hand(Time/100,.9)
  58. 57 RETURN
  59. 58 '
  60. 59 DEF PROC Disp_Face
  61. 60     LINE WIDTH = 1
  62. 61     ELLIPSE Centerx,Centery,Xrad+1,Yrad+1
  63. 62     FOR I=0 TO 49
  64. 63         Angle!=I* PI /25:S!= SIN(Angle!):C!= COS(Angle!)
  65. 64         IF I MOD 5=0 THEN
  66. 65
  67. 66             X1!=Centerx+.91*S!*Xrad
  68. 67             Y1!=Centery-.91*C!*Yrad
  69. 68             X2!=Centerx+S!*Xrad
  70. 69             Y2!=Centery-C!*Yrad
  71. 70             DRAW INT(X1!+.5), INT(Y1!+.5) TO INT(X2!+.5), INT(Y2!+.5)
  72. 71
  73. 72             TEXT Centerx+.9*S!*Xrad-Charx/2*(1+S!),Centery-.9*C!*Yrad+Chary/2*(1+C!), CHR$(I/5+ ASC("0"))
  74. 73         ELSE
  75. 74             X1!=Centerx+.95*S!*Xrad
  76. 75             Y1!=Centery-.95*C!*Yrad
  77. 76             X2!=Centerx+S!*Xrad
  78. 77             Y2!=Centery-C!*Yrad
  79. 78             DRAW INT(X1!+.5), INT(Y1!+.5) TO INT(X2!+.5), INT(Y2!+.5)
  80. 79         ENDIF
  81. 80     NEXT I
  82. 81 RETURN
  83. 82 '
  84. 83 DEF PROC Draw_Centerline(Angle!,Start!,End!)
  85. 84     LOCAL S!,C!
  86. 85     S!= SIN(Angle!):C!= COS(Angle!)
  87. 86     DRAW Centerx+Start!*S!*Xrad,Centery-Start!*C!*Yrad TO Centerx+End!*S!*Xrad,Centery-End!*C!*Yrad
  88. 87 RETURN
  89. 88 '
  90. 89 DEF PROC Disp_Hand(Number!,Length!,Thickness)
  91. 90     LOCAL S!,C!,Angle!
  92. 91     LINE WIDTH = Thickness
  93. 92     Angle!=Number!* PI /5
  94. 93     S!= SIN(Angle!):C!= COS(Angle!)
  95. 94     DRAW Centerx,Centery TO Centerx+Length!*S!*Xrad,Centery-Length!*C!*Yrad
  96. 95 RETURN
  97. 96 DEF PROC Compute_Hand(Ar_Part,Number!,Length!)
  98. 97     LOCAL S!,C!,Angle!
  99. 98     Oldhandx(Ar_Part)=Handx(Ar_Part)
  100. 99     Oldhandy(Ar_Part)=Handy(Ar_Part)
  101. 100     '
  102. 101     Angle!=Number!* PI /5
  103. 102     S!= SIN(Angle!):C!= COS(Angle!)
  104. 103     Handx(Ar_Part)=Centerx+Length!*S!*Xrad
  105. 104     Handy(Ar_Part)=Centery-Length!*C!*Yrad
  106. 105 RETURN
  107. 106 '
  108. 107 DEF PROC Draw_Line(A,B,X,Y,Thickness)
  109. 108     LINE WIDTH = Thickness
  110. 109     DRAW A,B TO X,Y
  111. 110 RETURN
  112.